﻿#include "SysLog.h"
#include "spdlog/async.h"
#include "spdlog/sinks/stdout_sinks.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "../util/FileUtil.h"

SysLog::SysLog(void)
{
	// 创建日志存储目录
	FileUtil::Mkdirs("logs");
	// 创建异步日志线程池
	spdlog::init_thread_pool(8192, 1);
	// 全局默认格式
	spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] %v%$");

	// 创建一个每天0点0分的日志
	auto daily_sink = std::make_shared<spdlog::sinks::daily_file_sink_mt>("logs/box.txt", 0, 0);
	daily_sink->set_level(spdlog::level::info);
	daily_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] %v%$");

	// 控制台sink
	auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
	console_sink->set_level(spdlog::level::trace);
	console_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] %v%$");

	// 组合sink
	std::vector<spdlog::sink_ptr> sinks;
	sinks.push_back(daily_sink);
	sinks.push_back(console_sink);
	m_log = std::make_shared<spdlog::logger>("box", begin(sinks), end(sinks));
	//spdlog::register_logger(m_log);
}

SysLog::~SysLog(void)
{
	// 关闭所有日志
	spdlog::drop_all();
}